using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UI_新建世界 : UI基类
{
    private Text 规格;
    private Text 格子数量;
    private Text 警告;
    private InputField 存档名称;

    private Slider 地图规格进度条;
    public UI组件_展示框 展示进度;
    public Image 预览图;

    public int 最大地图规格;
    public int 最小地图规格;

    private int 计算后规格;
    bool 开始生成 = false;

    private Button 生成世界;
    private Button 返回;


    void Start()
    {
        规格 = 查找控件<Text>("文本_规格");
        格子数量 = 查找控件<Text>("文本_地图格子数");
        地图规格进度条 = 查找控件<Slider>("彩色进度条");
        警告 = 查找控件<Text>("文本_警告");
        存档名称 = 查找控件<InputField>("存档名输入");
        展示进度.添加数据("等待确认生成");
        返回 = 查找控件<Button>("返回");
        生成世界 = 查找控件<Button>("生成世界");
    }

    protected override void 点击事件(string 按钮名)
    {
        switch (按钮名)
        {
            case "生成世界":
                返回.gameObject.SetActive(false);
                生成世界.gameObject.SetActive(false);
                if (存档名称.text == "")
                {
                    //提示
                    UI管理器.获取实例.加载面板<UI_提示框>("预设组件/提示框/提示框",UI层级.上层,(t)=> 
                    {
                        t.初始化("未输入存档名称\n将以 新的世界 为存档名", (b) =>
                        {
                            if (b)
                            {
                                //新的世界 创建世界
                                开始生成 = true;
                                展示进度.清除数据();
                                地面生成控制器.获取实例.规格 = 计算后规格;
                                地图数据保存.获取实例.清除地图数据();
                                地面生成控制器.获取实例.生成地图();
                            }
                        });
                    });

                }
                else
                {
                    string name = 存档名称.text;
                    if (存档路径管理.获取实例.地图列表.ContainsKey(name))
                    {
                        存档名称.text = 存档路径管理.获取实例.防止重名(name, 存档路径管理.获取实例.地图列表);
                        UI管理器.获取实例.加载面板<UI_提示框>("预设组件/提示框/提示框", UI层级.上层, (t) =>
                        {
                            t.初始化($"{name} 名称已重复,将以 {存档名称.text} 为名称,确认继续生成吗?", b => {
                                if (b)
                                {
                                    开始生成 = true;
                                    展示进度.清除数据();
                                    地面生成控制器.获取实例.规格 = 计算后规格;
                                    地图数据保存.获取实例.清除地图数据();
                                    游戏数据保存管理器.获取实例.存档名 = 存档名称.text;
                                    地面生成控制器.获取实例.生成地图();
                                }
                                else
                                {
                                    返回.gameObject.SetActive(true);
                                    生成世界.gameObject.SetActive(true);
                                }
                            });
                        });
                    }
                    else
                    {
                        开始生成 = true;
                        展示进度.清除数据();
                        地面生成控制器.获取实例.规格 = 计算后规格;
                        地图数据保存.获取实例.清除地图数据();
                        游戏数据保存管理器.获取实例.存档名 = 存档名称.text;
                        地面生成控制器.获取实例.生成地图();
                    }
                }
                break;
            case "返回":
                UI管理器.获取实例.隐藏面板(面板名);
                break;
            default:
                break;
        }
    }

    private float 锁;
    void 规格计算()
    {
        if (锁 == 地图规格进度条.value)
            return;
        锁 = 地图规格进度条.value;

        float 进度 = 地图规格进度条.value;
        计算后规格 = (int)(最大地图规格 * 进度) + 最小地图规格;

        规格.text = $"规格:{计算后规格}x{计算后规格}";
        格子数量.text = $"地图格子数量:{计算后规格 * 计算后规格}";

        if (计算后规格 >= 800)
            警告.gameObject.SetActive(true);
        else
            警告.gameObject.SetActive(false);
    }

    private void FixedUpdate()
    {
        规格计算();
    }

    private void Update()
    {
        if (开始生成)
        {
            foreach (var item in 地面生成控制器.获取实例.生成信息)
            {
                if(item == "生成完成,正在保存地图")
                {
                    开始生成 = false;
                    预览图.sprite = 地面生成控制器.获取实例.预览图;
                    游戏数据保存管理器.获取实例.保存地图(计算后规格, 计算后规格 * 计算后规格, 存档名称.text == "" ? "新的世界" : 存档名称.text, 预览图.sprite);
                    //生成完成
                    返回.gameObject.SetActive(true);
                    生成世界.gameObject.SetActive(true);
                }
                展示进度.添加数据(item);
            }
            地面生成控制器.获取实例.生成信息.Clear();
        }
    }
}
